/*
 * @lc app=leetcode.cn id=122 lang=javascript
 *
 * [122] 买卖股票的最佳时机 II
 */

// @lc code=start
/**
 * @param {number[]} prices
 * @return {number}
 */
var maxProfit = function (prices) {
  // - 状态：定义dp[i][0|1] 为【第i个天的最大利润 持有 1 ｜未持有 0】
  // - 初始状态：dp[0][0]=0; dp[0][1]=-prices[0]
  // - 状态转移方程：
  //  未持有 dp[i][0] = Math.max(dp[i-1][0], dp[i-1][1]+prices[i])
  //  持有 dp[i][1] = Math.max(dp[i-1][0] - prices[i], dp[i-1][1])
  // - 答案：Math.max(dp[prices.length - 1][0],dp[prices.length - 1][1])
  const n = prices.length;
  const dp = new Array(n).fill(0).map((i) => new Array(2).fill(0));
  dp[0][0] = 0;
  dp[0][1] = -prices[0];
  for (let i = 1; i <= n - 1; ++i) {
    const price = prices[i];
    dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1] + price);
    dp[i][1] = Math.max(dp[i - 1][0] - price, dp[i - 1][1]);
  }
  return dp[prices.length - 1][0];
};
maxProfit([7, 1, 5, 3, 6, 4]);
// @lc code=end
